<?php

/**
 * inscripciones actions.
 *
 * @package    sistema_itec_new
 * @subpackage inscripciones
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class inscripcionesActions extends sfActions {

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeIndex(sfWebRequest $request) {
        $this->forward('default', 'module');
    }

    public function executeCursado(sfWebRequest $request) {
        $inscripcion_cursado = strtotime(date('Y-m-d', strtotime(str_replace('/', '-', sfConfig::get('app_inscripcion_cursado_desde'))))) < strtotime(date('Y-m-d', time() - 86400))
                && strtotime(date('Y-m-d', strtotime(str_replace('/', '-', sfConfig::get('app_inscripcion_cursado_hasta'))))) > strtotime(date('Y-m-d', time() - 86400));
        if ($inscripcion_cursado) {
            $persona = Doctrine::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
            $this->modulos_alumno = Doctrine::getTable('ModuloCohorte')->getUCDisponibles($persona->getId());
            $this->condiciones_cursado = Doctrine::getTable('CondicionCursado')->findAll();
        } else {
            $this->getUser()->setFlash('notice', 'Las inscripciones de cursado no estan disponibles');
            $this->redirect('homepage');
        }
    }

    public function executeInscribirCursado(sfWebRequest $request) {
        $persona = Doctrine::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($persona, 'home', 'index');

        $acuf = Doctrine::getTable('AlumnoCohorteUnidadFormacion')->findOneByAlumnoId($persona->getId());
        $incu = Doctrine::getTable('InscripcionCursado')->findByAlumnoCohorteUnidadFormacion($acuf->getId());
        $ids = array();
        foreach ($incu as $i) {
            $ids[] = $i->getId();
        }

        $modulos_inscribe = $request->getParameter('modulo');
        $conn = Doctrine_Manager::getInstance()->connection();
        try {
            $conn->beginTransaction();
            foreach ($modulos_inscribe as $key => $modulo) {
                $inscripcion = Doctrine::getTable('Alumno')->getInscripcion($key, $ids);
                if ($inscripcion) {
                    $ic = Doctrine::getTable('InscripcionCursado')->findOneById($inscripcion['inscripcion']);
                    $admc = Doctrine::getTable('AlumnoDocenteModuloCohorte')->findOneById($inscripcion['id']);
                    if ($modulo['condicion'] == 0) {
                        $admc->delete();
                        $ic->delete();
                    } else if ($modulo['condicion'] != $inscripcion['condicion']) {
                        $ic->setCondicionCursadoId($modulo['condicion']);
                        $ic->save();
                    }
                } else {
                    if ($modulo['condicion'] > 0) {
                        $dmc = Doctrine::getTable('DocenteModuloCohorte')->findOneByModuloCohorteId($key);
                        $ic = new inscripcionCursado();
                        $ic->setFechaInscripcion(date('Y-m-d'));
                        $ic->setPromocionable(1);
                        $ic->setAlumnoCohorteUnidadFormacionId($acuf->getId());
                        $ic->setCondicionCursadoId($modulo['condicion']);
                        $ic->save();

                        $admc = new AlumnoDocenteModuloCohorte();
                        $admc->setDocenteModuloCohorteId($dmc->getId());
                        $admc->setInscripcionCursadoId($ic->getId());
                        $admc->save();
                    }
                }
            }
            $conn->commit();
            $this->getUser()->setFlash('notice', 'La inscripción se ha realizado correctamente.');
            $this->redirect('inscripciones/cursado');
        } catch (Exception $e) {
            $conn->rollback();
            $this->getUser()->setFlash('error', 'Se ha producido un error al guardar la inscripción.');
            $this->redirect('inscripciones/cursado');
        }
    }

    public function executeFinales(sfWebRequest $request) {
        $inscripcion_examenes = strtotime(date('Y-m-d', strtotime(str_replace('/', '-', sfConfig::get('app_inscripcion_examenes_hasta'))))) > strtotime(date('Y-m-d', time() - 86400))
                && strtotime(date('Y-m-d', strtotime(str_replace('/', '-', sfConfig::get('app_inscripcion_examenes_desde'))))) < strtotime(date('Y-m-d', time() + 86400));
        $persona = Doctrine::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($persona, 'home', 'index');
        $x = $persona->getAlumno()->getEstadoAdministrativoActual();
        $y = $persona->getAlumno()->getEstadoEconomicoActual();
        if ($inscripcion_examenes) {
            if ($persona->getAlumno()->getEstadoAdministrativoActual() != 2 || $persona->getAlumno()->getEstadoEconomicoActual() != 3) {
                $this->getUser()->setFlash('error', 'La inscripción no se puede realizar porque adeudas cuotas o documentación.');
                $this->redirect('homepage');
            }
            $this->modulos_alumno = Doctrine::getTable('Examen')->getExamenesDisponibles($persona->getId());
            $this->condiciones = array(0 => 'No se inscribe', 1 => 'Regular', 2 => 'Libre', 3 => 'Promocionado', 4 => 'Equivalencia');
        } else {
            $this->getUser()->setFlash('notice', 'Las inscripciones a exámenes no estan disponibles');
            $this->redirect('homepage');
        }
    }

    public function executeInscribirFinales(sfWebRequest $request) {
        $persona = Doctrine::getTable('Persona')->findOneByUsuarioId($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($persona, 'home', 'index');

        $examenes = $request->getParameter('examen');
        $conn = Doctrine_Manager::getInstance()->connection();
        $conn->beginTransaction();
        foreach ($examenes as $id => $examen) {
            $examen_alumno = Doctrine::getTable('examenAlumno')->findOneByExamenAndAlumno($id, $persona->getId());
            if ($examen_alumno) {
                if ($examen['condicion'] == 0) {
                    $examen_alumno->delete();
                } else {
                    $examen_alumno->setCondicion($examen['condicion']);
                    $examen_alumno->save();
                }
            } else if ($examen['condicion'] != 0) {
                $numera_permiso = Doctrine::getTable('Config')->findOneByKey('NUMERA_PERMISOS_EXAMEN');
                
                $examen_alumno = new examenAlumno();
                $examen_alumno->setNumeroPermiso($numera_permiso->getValue());
                $examen_alumno->setPago(0);
                $examen_alumno->setAusente(0);
                $examen_alumno->setCondicion($examen['condicion']);
                $examen_alumno->setAlumnoId($persona->getId());
                $examen_alumno->setExamenId($id);
                $examen_alumno->save();
                
                $numera_permiso->setValue($numera_permiso->getValue() + 1);
                $numera_permiso->save();
            }
        }
        try {
            $conn->commit();
            $this->getUser()->setFlash('notice', 'La inscripciones se realizó correctamente.');
            $this->redirect('inscripciones/finales');
        } catch (Exception $e) {
            $conn->rollback();
            $this->getUser()->setFlash('error', 'Se ha producido un error al realizar la inscripción.');
            $this->redirect('inscripciones/finales');
        }
    }

}
